package org.tissou.server.Base;

import org.tissou.server.Utils.InterfaceMySQL;
import org.tissou.client.Services.MonException;
import org.tissou.client.Services.Compte;
import org.tissou.client.Services.ProprietaireInfos;

import java.util.List;
import java.util.ArrayList;
import java.util.logging.Logger;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * Created by IntelliJ IDEA.
 * User: Claire
 * Date: 11-Jan-2009
 * Time: 18:58:06
 * To change this template use File | Settings | File Templates.
 */
public class Proprietaire_Ensemble {
  List<Proprietaire> Liste = new ArrayList<Proprietaire>();

  private static final Logger LOG = Logger.getLogger(Proprietaire_Ensemble.class.getName());

  private Proprietaire_Ensemble(List<Proprietaire> ProprioAvecTousLesCompte){
    Liste = ProprioAvecTousLesCompte;
  }

  public static Proprietaire_Ensemble ChargerEnsembleProprietaire(){
    return new Proprietaire_Ensemble(Charger_Proprietaires());
  }

//  public static Proprietaire_Ensemble ChargerEnsembleProprietairesOrdonnees(ProprietaireInfos personne_principale){
//
//  }

  private static List<Proprietaire> Charger_Proprietaires(){
    List<Proprietaire> Chargement = new ArrayList<Proprietaire>();
    ResultSet result;
    try {
      result = InterfaceMySQL.getInstance().RecupererDonnees(
          String.format("SELECT DISTINCT(Proprietaire) FROM Comptes"));
      while(result.next()){
      String NomProprietaire = result.getString(1);
      LOG.info(NomProprietaire);
      Chargement.add(Proprietaire.ChargerProprietaire(NomProprietaire));
      }

    } catch (SQLException e) {
      throw new MonException("Impossible de charger un proprietaire",e);
    }
    return Chargement;
  }

  private static List<Proprietaire> Charger_Proprietaires_Ordonnes(ProprietaireInfos personne_principale){
    List<Proprietaire> Chargement = new ArrayList<Proprietaire>();
    ResultSet result;
    try {
      result = InterfaceMySQL.getInstance().RecupererDonnees(
          // TODO(Claire): Faire une belle query (il va falloir y reflechir un peu !!!)
          String.format(""));
      while(result.next()){
      String NomProprietaire = result.getString(1);
      LOG.info(NomProprietaire);
      Chargement.add(Proprietaire.ChargerProprietaire(NomProprietaire));
      }

    } catch (SQLException e) {
      throw new MonException("Impossible de charger un proprietaire",e);
    }
    return Chargement;
  }


  public Proprietaire ObtenirProprietaire (String nom){
    for (Proprietaire proprietaire : this.Liste){
      if (proprietaire.getNom().equalsIgnoreCase(nom)){
        return proprietaire;
      }
    }
    return null;
  }

  public Compte ObtenirCompte(int noCompte) {
    for (Proprietaire proprietaire : this.Liste) {
      for (Compte compte : proprietaire.ObtenirTousLesComptes()) {
        if (compte.getNoCompte() == noCompte) {
          return compte;
        }
      }
    }
    return null;
  }

  public List<Proprietaire> getListe() {
    return Liste;
  }
}
